package com.own.component.common.base.service.hook;

import com.own.component.common.base.entity.po.BaseBean;
import com.own.component.common.base.entity.vo.BaseBeanVo;

import java.util.function.Function;

/**
 * BaseCheckHook
 *
 * @author chenxueli
 * @date 2022-06-15 03:14:15
 */
public interface BaseCheckHook<PO extends BaseBean, VO extends BaseBeanVo<PO>> {

    /**
     * 验证po对象
     *
     * @return 验证后的po对象
     */
    default Function<PO, PO> checkBefore() {
        return null;
    }

    /**
     * 验证po对象
     *
     * @return 验证后的po对象
     */
    default Function<VO, VO> checkAfter() {
        return null;
    }

    /**
     * 验证新增前po对象
     *
     * @return 验证后的po对象
     */
    default Function<PO, PO> checkBeforeAdd() {
        return checkBefore();
    }

    /**
     * 验证新增后vo对象
     *
     * @return 验证后的vo对象
     */
    default Function<VO, VO> checkAfterAdd() {
        return checkAfter();
    }

    /**
     * 验证更新前po对象
     *
     * @return 验证后的po对象
     */
    default Function<PO, PO> checkBeforeUpdate() {
        return checkBefore();
    }

    /**
     * 验证更新后vo对象
     *
     * @return 验证后的vo对象
     */
    default Function<VO, VO> checkAfterUpdate() {
        return checkAfter();
    }

}
